Исправить ошибку в основной ветке удаленного репозитория
Обычно для исправления ошибок создают тематические ветки, в которых исправление выполняют, тестируют и, если все хорошо, то вливают эту ветку в основную. Однако бывают мелкие исправления, например, описки в интерфейсе, которые заведомо не нарушают работу приложения, выполняются быстро и не требуют дополнительного тестирования. Такие исправления нередко выполняют прямо в основной ветке.
В этом примере вы смоделируете работу двух разработчиков с удаленным репозиторием. Каждый из них исправляет свою небольшую ошибку прямо в основной ветке и отправляет результат на сервер.
Для создания примера использованы 1C:EDT 2024.1.1 и «1С:Предприятие» 8.3.25.1394.
Выполните подготовительные действия
- Зарегистрируйтесь на сайте GitHub;
- Получите токен доступа;
- Создайте копию (fork) репозитория https://github.com/1C-Company/dt-demo-configuration;
- Запустите 1C:EDT Start;
- Создайте два новых проекта: ПроектАндрей и ПроектВасилий;
- Для каждого из этих проектов:
-
- Запустите проект;
- Нажмите Начать работу;
- Импортируйте проект из своей копии (fork) (возможна ошибка). При импорте используйте токен вместо пароля, иначе вы не сможете отправлять свои изменения в репозиторий на GitHub;
- Настройте параметры Git, чтобы видеть, кто из разработчиков внес изменения
-
- Нажмите в главном меню;
- Перейдите на страницу ;
- Откройте вкладку Настройки репозитория;
- Добавьте две записи (Добавить
запись):
- В проекте
ПроектАндрей:
user.name — Андрей user.email — Андрей@server.example.com - В проекте
ПроектВасилий:
user.name — Василий user.email — Василий@server.example.com
- В проекте
ПроектАндрей:
- Нажмите Применить и закрыть;
- Настройте рабочее пространство
-
- Откройте панель История. Для этого
в панели Навигатор нажмите в контекстном меню проекта. Панель
История всплывет в
правом верхнем углу;

- Нажмите на значок Восстановить — панель История зафиксируется в нижней части экрана;
- В командной панели отожмите кнопку
(Связать с редактором), чтобы панель показывала все коммиты, независимо
от того, что выделено в панели Навигатор;
- Нажмите
(Change the File Scope for the History) и выберите вариант фильтрации Все
изменения в репозитории, чтобы панель
показывала все коммиты;
- Откройте панель История. Для этого
в панели Навигатор нажмите в контекстном меню проекта. Панель
История всплывет в
правом верхнем углу;
Выполните пример
- Осмотритесь вокруг. Два разработчика, Андрей и Василий, разрабатывают прикладное решение. Оба они подключены к удаленному репозиторию, роль которого выполняет ваша копия (fork) на сайте GitHub. В ходе примера Андрей и Василий исправят по небольшой ошибке прямо в основной ветке разработки master. Поскольку они будут делать это на конкурентной основе, вы увидите, каким образом объединяются между собой изменения разных разработчиков.
- Василий более опытный, он первым исправляет ошибку. Ошибка заключалась в том,
что в проекте не хватало констант:
- Перейдите в ПроектВасилий;
- Добавьте константу в проект DemoConfDT;
- Зафиксируйте изменения:
- В панели Индексирование Git напишите сообщение коммита: 2 коммит;
- Нажмите Фиксировать и отправить... чтобы зафиксировать изменения и сразу отправить их в удаленный репозиторий;
- 1C:EDT покажет вам результат отправки изменений. Из локальной ветки
master в удаленную ветку
master был успешно передан один коммит;

- В панели История вы видите, что в
текущей локальной ветке master появился новый коммит Василия, который
стал головой ветки, и этот же коммит есть на сервере и на него указывает
удаленная ветка master (origin/master). Таким образом
история локального репозитория совпадает с историей удаленного
репозитория;

- Теперь в дело включается Андрей. Он тоже исправляет ошибку. Ошибка заключалась в
том, что в проекте не хватало справочников:
- Перейдите в ПроектАндрей;
- Добавьте справочник в проект DemoConfDT;
- Зафиксируйте изменения. Напишите сообщение коммита: 3 коммит, нажмите Фиксировать и отправить...;
- 1C:EDT покажет вам результат отправки изменений. На этот раз результат будет
отрицательный. Отправка изменений из локальной ветки
master в удаленную ветку
master отклонена;

- В панели История вы видите,
что в текущей локальной ветке master появился новый коммит Андрея,
который стал головой ветки. Однако этот коммит не был передан на сервер и
удаленная ветка master осталась на том же коммите, на
котором и была. Об этом говорит указатель origin/master. Таким образом история
локального репозитория разошлась с историей удаленного репозитория. У вас есть
один неотправленный коммит;

- Возникшая ситуация требует пояснения:

Василий получил изменения с сервера (коммит 1), создал свои изменения (коммит 2) и успешно отправил их на сервер, потому что состояние серверной ветки за это время не изменилось.
Андрей также получил изменения с сервера (коммит 1), создал свои изменения (коммит 3). Однако за это время в серверной ветке появились изменения Василия (коммит 2). Чтобы изменения Андрея (коммит3) появились на сервере, их нужно каким-то образом объединить с изменениями Василия (коммит 2). Git не выполняет такие операции на сервере, поэтому и отклоняет изменения Андрея. Даже несмотря на то, что Андрей и Василий изменяли разные части проекта.
Объединение изменений (слияние веток) в Git вы должны выполнить в своем локальном репозитории. Поэтому Андрей сначала должен получить с сервера изменения Василия (коммит 2), объединить их со своими изменениями (коммит 3) и только после этого он сможет отправить свой результат на сервер. На схеме это будет выглядеть следующим образом:

- Получите изменения с сервера и слейте их со своей локальной веткой. Для этого в панели Навигатор нажмите в контекстном меню проекта;
- 1C:EDT покажет вам результат получения и слияния изменений. С сервера, из
удаленной ветки origin/master, был получен 2 коммит Василия и он был успешно
объединен с 3 коммитом Андрея. В результате был создан коммит
слияния.

- В панели История вы видите,
что 1C:EDT получила с сервера коммит Василия (2 коммит) и в ветке удаленного
отслеживания отметила (origin/master) что именно на нем находится ветка
master в удаленном репозитории. Затем 1C:EDT влила
этот коммит в локальную ветку и создала новый коммит — коммит слияния, который
стал головой локальной ветки master;

- Теперь локальную ветку master можно отправить на сервер. В панели Навигатор нажмите в контекстном меню проекта;
- 1C:EDT покажет вам результат отправки изменений. Из локальной ветки
master в удаленную ветку
master были успешно переданы два коммита: 3 коммит
Андрея и коммит слияния, который был создан в результате объединения с
изменениями Василия;

- В панели История вы видите,
что удаленная ветка master указывает на тот же коммит, что и локальная
ветка. Значит все коммиты были переданы на сервер и сейчас история локального
репозитория совпадает с историей удаленного репозитория;

- Еще раз взгляните на общую схему работы:

Василий внес изменения в ветку master и отправил их на сервер. Андрей тоже изменил ветку master, но т.к. на сервере уже появились изменения Василия, Андрею нужно сначала получить их с сервера, объединить со своими изменениями (), а затем уже отправлять на сервер.